#pragma once
/**
 * @brief 增加一个运动模式存储需要实现得接口
 *
 */
#ifndef __SPORTS_MODE_STORE_INSTANCE_H__
#define __SPORTS_MODE_STORE_INSTANCE_H__
/**
 * @brief
 *
 */
void sports_mode_store_instance_ctor(void);

/**
 * @brief
 *
 */
void sports_mode_store_instance_save(int valid_enable);

typedef enum __sports_mode_traverse_result_t
{
    sports_mode_traverse_result_none,
    sports_mode_traverse_result_stop, //!< 停止遍历
} sports_mode_traverse_result_t;

typedef sports_mode_traverse_result_t (*traverse_callback)(const sports_mode_summary_info_t *pitem);
/**
 * @brief 顺序遍历
 *
 * @param callback
 */
void sports_mode_store_traverse(traverse_callback callback);

/**
 * @brief 逆序遍历
 *
 * @param callback
 */
void sports_mode_store_reverse_traverse(traverse_callback callback);

#ifdef SPORTS_MODE_GET_INFO_BY_MODE_TIME
/**
 * @brief 通过time mode快速获取summay info
 *
 * @param callback
 * @param time
 * @param mode
 * @return true 能找到对应的time，mode
 * @return false 找不到
 */
bool sports_mode_store_query_by_time_mode(traverse_callback callback, uint32_t time, uint8_t mode);
#endif
typedef struct __sports_mode_store_fill_detail_para_t
{
    const sports_mode_summary_info_t *pitem;
    const sports_mode_summary_info_t *item_instance;
    uint32_t index; //!< 从哪个detail开始填充
    uint32_t count; //!< 填充多少个
    uint8_t *buff;
    uint32_t buff_len;
} sports_mode_store_fill_detail_para_t;
/**
 * @brief
 *
 * @param para
 * @return uint32_t 实际填充了多少字节的buff
 */
uint32_t sports_mode_store_fill_detail(const sports_mode_store_fill_detail_para_t *para);

/**
 * @brief
 *
 * @param para
 * @return sports_mode_id_t
 */
sports_mode_id_t sports_mode_store_get_id(const sports_mode_summary_info_t *para);

/**
 * @brief for test
 *
 */
void sports_mode_store_instance_clear(void);

/**
 * @brief 清除存储得所有数据
 *
 */
void sports_mode_store_instance_clear_force(void);

/**
 * @brief 
 * 
 */
void sports_mode_store_instance_test(void);
#endif //!<__SPORTS_MODE_STORE_INSTANCE_H__
